約 581,581 件
https://w.atwiki.jp/fpstdm/
FPS(ファーストパーソンシューティングゲーム)クラン TDM(チームデスマッチ)へようこそ! 創設の経緯 FPSの基本はやっぱデスマッチモードだよね!?ってことで 「まずは基本を押さえよう!こまかい話はそれから!」 ということから設立されたクランがTDMです。 ガチでもまったりでもない、ちょうど中間に位置する クランかなと。「ガチクランへの移籍も視野に入れられる ゆりかご的なクラン」に値するのではないかと思います。 初代クランマスター:SOGeki.R30 2代目クランマスター:静流 活動範囲 主に立ち上がりの場であるCF(クロスファイア)というFPSで 遊んでいますが、皆FPS好きということもあって、CFに 留まらず、SAやA.V.Aなど様々なFPSに気の趣くまま 出没してます。 活動スタイル 勝敗に一喜一憂、今遊んでるゲームを真剣に遊び倒す モットー passion+courage=VICTORY!(情熱と勇気が勝利をもたらす) メンバー募集 以下の条件にマッチする方を年中無休で募集しています。 20歳以上の常識・良識ある男女 FPSが何より大好物な人(上手い下手は不問。) チート・バグ類を使わないフェアプレイヤー (補足事項) VCはVentを使っています。(家庭環境等で使えない方は使わなくてもOK) 社会人主体で現在40名以上在籍しています。 社会人が大半のため、主活動時間帯は2100~0100の間となってます。 IRCチャンネルは サーバ名:irc.friend-chat.jp チャンネル名:#CF_TDM clanTDMっていいね♪ブックマークしちゃお☆ 前月 2021年12月 翌月 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
https://w.atwiki.jp/sakura398/pages/822.html
<目次> 歴史の捏造 反日国家の実態中国 朝鮮 歴史の捏造 日本は悪い国だった? 日本の教科書は捏造されています。 本当の歴史とは? 外部リンク⇒初心者のための国民が知らない反日の実態 太平洋戦争への流れ 【関連】 親日国 世界から見た日本 反日国家の実態 中国 現在でも他国に侵略中の国です。 【関連】 東トルキスタン侵略の正体 チベット侵略の正体 南モンゴル侵略の正体 朝鮮 慰安婦問題、朝鮮人連行を捏造してる上に在日特権で優遇されている。 戻る⇒入門ページ 歴史外交⇒次へサイトマップ7
https://w.atwiki.jp/ringofworld/pages/16.html
仕様や関連情報はサポートサイトで日々少しずつ公開されているけど 今から過去ログを全部追ってなんていられないと思うので(←一応追う努力はしてほしいけど) 入門者用ページのつもりで色々書いてみるページ。 ここに書いてあることは絶対ではないので参考程度にどうぞ。 はじめに キャラメイクの注意点男女の違い 職業 序盤に絶対知っておきたいことSPについて 重量と移動力重力判定 死亡と救助依頼 エリア移動制限 知っておいた方が得な小ネタキー操作 マップ 自宅 消費経験点 スキルスキルセット 転職 隠しステータス? 宝箱 青村付近のレベル上げクエスト ダンジョン制覇 雇用冒険の仲間を雇う 雇用されるには 他ユーザーとの交流基本 BBS 「交流」(メール) ギルド ファンサイト・攻略サイト コメント はじめに お約束。 1、公式サイトとサポートサイトはまめにチェックする 追加要素や新仕様なども全てここで公開されますし、 たまにテスターへの指示(今は○○はしないで下さい、等)があるので。 ちょっとした疑問はここ見れば解決することも多い…ような気がする。 2、バグはなるべく報告する まあテスターですし、一応。悪用はもってのほか 3、特定プレイヤー・ギルドを許可無く晒さない 2chとかでも正直やめといた方がよいと思うけどwiki内では完全に自重。 当たり障りの無い内容でもそれが呼び水になる事もあるから一応NG。 4、自分が不利になる仕様変更があっても泣かない ROWは開発中なのでいつどの仕様が変更になってもおかしくありません(基本的に改善のはずですが)。最初から覚悟しておきましょう どうしてもそれはやめて欲しいと思ったら、サポートサイトで要望を出しましょう。 キャラメイクの注意点 男女の違い アバター(キャラのグラフィック)に使用可能なパーツ 女性専用装備がある 個人的意見だが、男キャラは現状少し冷遇気味。ゲームバランスに影響するほど大した差ではないのだけど…。 職業 キャラの作り直し不可能は旧仕様。今は制限付きだが後で初期化可能。 だからそこまで慎重になる事も無いのかもしれない。強ジョブ、強スキルなんて言っても仕様変更だっていくらでもあり得るし。 転職する所まで行くと少し気を使う必要があるが、それはまた別のところで 雇われやすい職業というのはやっぱり存在するだろうけれども。 序盤に絶対知っておきたいこと SPについて 外やダンジョンを歩くとSP(腹)が減って最後は死んでしまう。 食料を使うか宿泊する、信仰者のスペル「マナ」を使うなどして回復。 08年4月、街では歩き回ってもSPが消費されないように仕様変更された 重量と移動力 所持アイテムの重量計が重すぎると戦闘中動けなくなる 重さは生命値以下を心がける,ステータス画面で「移動」の数値を確認 移動力減少には生命以外の要素も関係しているらしい 移動力が十分でも隣に敵が隣接している場合、移動するのに余計に移動力を消費する。移動力4あっても1体に隣接されたら一歩しか動けない、2体に隣接されたら一歩も動けない 重力判定 特定のエリアで、重過ぎる場合/軽過ぎる場合に移動不能となる 併せて命中,ダメージ修正を比率で低減? 死亡と救助依頼 死んでも絶対に神に祈ってはいけない。救助依頼を出すべき 自キャラの死亡(傭兵はいくら死んでもOK)の他に電源ボタンなどでのアプリの強制終了でも死亡扱いになる 強制終了の場合、死亡地点は最後にセーブした場所になるので注意。(所持金や経験点などのデータもそこまで巻き戻る) 最近はかなり減ったが、バグによるエラー等アプリ側の問題で突然強制終了をせざるを得なくなる可能性もあるので、こまめなセーブは心がけたい 救助する人が救助しやすいように、どのあたりで死んだのか(ダンジョンの場合、階層)をコメントに書いておくと、お互い楽。 エリア移動制限 2008/5/13よりサーバ負荷低減の為に実装された アプリを起動したり、エリア(街やフィールド・ダンジョン)移動する度にカウントが進み、行動権が0になると強制ログアウトする機能。 LV1~3:行動50 LV4~11:行動40 LV12~23:行動35 LV24~:行動30 繰り越しは最大5ポイントまで、累積99ポイントを上限。 放置による累積は最終ログアウト日時より2日経過より5ポイント加算、累積99ポイントを上限。 (News転載) 知っておいた方が得な小ネタ キー操作 待機画面で1ボタンを押すと地図とメッセージウィンドウの表示を切り替える事ができる メニュー画面で2ボタンを押すとBBSのログがリスト表示され、そこから書き込み主と交流(メール等)する事もできる 以下の条件を満たしている時に0ボタンを押すとスクリーンショットが撮れるフィールド上(街やダンジョン等)でカメラを持っているキャラが歩いているとき(画面下部にカメラマークが表示されます)※自分が持っていなくても使える ステータス画面(自分がカメラを持っている時、自分のステータスだけ) 隊列(記念撮影?) マップ 暗記する必要はないけど、マップに表示される色の付いた点の意味をまとめておく。(サポートサイト・3/25のNEWSより) 水色:自キャラ 黄色:ダンジョン入口、階層移動、出口等移動系 / 特殊イベント(ボス戦等)※ダンジョンのみ ┗地図系アイテムの使用,スキルの使用 / 敵感知能力 青色:救助対象者 ┗救助請負時 赤色:戦闘 ┗敵感知能力発動中 白色:釣りポイント ┗釣り能力1以上 ライム:狩りポイント/野営 ┗狩り能力1以上/野営能力1以上 ピンク:宝箱や採取物など ┗宝感知能力発動中 暗赤色:盗賊系罠 ┗盗賊系罠感知 暗緑色:自然系罠 ┗自然系罠感知 暗紫色:魔術系罠 ┗魔術系罠感知 暗水色:その他罠 ┗未定 自宅 空いてる土地を買うことで建物を建てる事が出来る。また別の土地を買えばそこに引っ越す事になる。 その「建物」は自宅に繋がる窓口のようなものでデータは別に存在する。引越しをしても自宅のレベルは下がらないし、掲示板のログやその他の設定も消えない。 自宅を持っていなくても倉庫データ自体は存在するので他の人の自宅の「倉庫屋」を利用する事でアイテムの出し入れは出来る(1回10G) ブルーリグワード村(通称:青村)の土地は人気があるのですぐ埋まってしまっていると思うけど、ブルーリグワード近郊の右下(ラグライル村)とか次の街のバイカルにきっと空きはあるので我慢するんだ なお、現仕様では一ヶ月以上ログアウト実績のないプレイヤー(つまりROWをアプリを起動させてプレイしてないって事)の自宅は自動的に空き地化される。あくまでも「建物」が消えるだけでデータは残るので、この場合も再度どこでもいいから土地を購入すれば元通りの自宅になる。(はずなのだが現状バグで厄介な事になる恐れが大きい) 0番地に自宅を建てるとその区画の「区長」になる。区(街通り)のWeb情景文言を変更が可能に 更に詳しい事はROW実践の自宅の項目で 消費経験点 経験点には総合経験点と消費経験点の2つがある。ゲーム内のステータス画面では“消費経験点(総合経験点)”の形式で表示されている 経験点を得ると両方とも同じ数ずつ増えていく この内、レベルアップに関係あるのは総合経験点の方のみ。消費経験点を消費してもレベルは下がらない。 スキル スキルは村や町の店で購入するものがほとんど。それなりに値は張るが、便利なものも多いので優先的に手に入れたい ジョブレベル(戦闘技能基礎Lv○○、定式魔法Lv○○など)に応じて威力が変化するものが多い。鍵空けの確率や攻撃スキルの威力などもレベル12まで育てるとかなり差が出る つまり中途半端なジョブレベルでの転職は中途半端な効果のスキルばかりを残す事になってしまい、あまりオススメできない スキルセット バインダアイテムを入手するとバインダを使ってより自由にスキルをセット出来る様になるが、最初はWebで所持品からのみ行うことになる。 スキルをセットするには大抵経験点を消費するので無駄遣いしないように注意が必要。 後述するが転職・廃業にも経験点は必要なので足りなくなると泣きを見る 転職 まずはクラス派生のページを参照。(※PC向け) 基本的に自分がしたいようにすればいいのだけど、どんな方向のキャラにしたいのかを考えて慎重に行う。 転職可能レベル(公式の「ClassChange」で確認できる)になっても転職せずにレベルを上げてしまうと、その回のステータス成長はほとんどなく、新たにジョブレベルも得られず非常に無駄である。すぐに転職すべき。 廃業はどのタイミングでも出来るけど上のスキルの項目でも書いたようにジョブレベルをマックスまで上げてから廃業がオススメ(そこまで行ったら廃業しないでクラスチェンジする手もあるか) 戦士系→盗賊系のように系統をまたいだ転職を行いたい時は、最も慎重さが必要。理由は最下層のクラス「無職」のジョブ「自由な心」は無職になる度にレベル1に戻ってしまうから。早く釣りがしたい、料理がしたいなどの理由でちょっと先に取っておくか、などと気軽に取りに行ってしまってはいけない。 廃業と上位クラスへの転職は、どちらも経験点を消費するので、無職を挟まない転職もなるべく数を減らした方が良い。 ジョブは(おそらく)8個まで所持可能。8個を超えると1つ選んで削除 隠しステータス? ROWには画面には表示されないさまざまな数値が設定されているらしい。 隠しステータスの数はかなり多いらしいのだが詳細は不明。 プレイヤーの行動によって色々変化していくようだ。これによって設定できる称号も変化していく 青村に落ちている財布は届けるといいことが…。 宝箱 ダンジョンには宝箱が落ちている事がある。(出現確率を上昇するアイテムなども存在するようだ) 普通は茶色い宝箱だが、中にはレアな青色宝箱が存在するダンジョンもある。 アイテム入手の基本的な流れは「罠を探す(盗賊罠探知)」→「罠を外す(盗賊罠解除)」→「鍵を開ける(開錠)」。スキル補正が無いと確率が低くて無謀なので宝が欲しいならの対応する盗賊スキル(なるべく高レベル)を持っている人をPTに加えておきたい。 宝箱がダンジョンのどの階層に出るかはアイテム毎に固定のようだ(複数の階層で出るアイテムも多いが)。宝箱からアイテムを見つけた時はどの階層で見つけたのか憶えておいた方がいい。 それをwikiに反映してくれるとなおいい。 青村付近のレベル上げ 新しいスキルを覚えるのにも次の街バイカルに行くにもレベルを上げなくてはいけない 経験点1000で1レベルアップ。 だが敵を倒しても経験点はあまりもらえない ROWで重要なのはクエストとダンジョン制覇の経験点。レベル1なら一番簡単な教会地下ダンジョンでも経験点200以上もらえる。 クエスト 教会入口に居る男から受けられるクエストをこなす(クエストのやり直しは出来ないものもある) ダンジョン制覇 教会右通路に隠ダンジョン全B2Fの探査を繰り返す(B2Fの石版に乗ると地上に帰還) レベルが上がるとダンジョンでもらえる経験点は減っていくので、少しずつ難易度の高い(☆の数が多い)ダンジョンにも挑戦していく。 教会地下→青の塔→コボルトの洞窟→ゴブリンの洞窟→妖魔の森北部の順。 (青の塔には地下ダンジョンがあるがレベル?にならないと入れない※情報求む!) 妖魔の森北部は5区までと短いわりに貰える経験点が多いので、ここが無理なくクリア出来る様になったら、レベルだけ考えた場合ここを即降りループし続けるのが序盤の一番効率の良い稼ぎだと思われる 狙ったアイテムを探しながら潜ると張り合いが出るかもしれない。オススメはゴブリンの洞窟の宝箱の蛍光の首飾り(常時照明+1) 雇用 冒険の仲間を雇う 傭兵登録名簿を使うかフィールドで出会った人を雇う ギルドメンバーor友達登録した人は雇用費が安い 入手経験点はPT最高レベルの人基準で決まるので、自分よりレベルが高い人を雇った場合、得られる経験点が減る。アイテム収拾など経験点以外の部分を重視する場合はそれもいいかもしれないが、ベースレベルが高い人は雇用費も高いので思案のしどころ 雇った人には手付金の他、戦闘などで得た金の1/5が給料として支払われる。二人雇った場合得られる金額は一人の時の3/5となる。なお、支払われるタイミングはセーブした時、ログアウトした時。 データのコピーを借りているだけなので給料が支払われる以外に相手に影響を及ぼす事はない。雇った人のアイテムを捨てようが防具や武器が壊れようが、全然OK。使い物にならなくなったら隊列画面から解雇してまた雇いなおせばいい 雇用されるには 確実な方法などもちろん無いが、簡単なアドバイス。 最序盤はあまり関係ないかもしれないしあくまで参考程度に 街の傭兵名簿に登録する 挨拶文で何が出来るのかアピールしてみる(持っているスキルや装備、移動力など) 自分が友達登録している相手からは雇われる可能性が上がると思う(値段的にも) キノコ事典、釣竿などで特色を出してみる(需要が合えば重宝されるかも) 他ユーザーとの交流 基本 ゲーム内での基本のコミュニケーション手段は通常BBS(全体、エリア)、メール(ゲーム内用語の「交流」)、自宅のゲストブック、ギルドBBSである。 ゲーム外でもファンサイトなどを通じたプレイヤー同士の交流も行われている オンラインゲームの基本だけど、相手が一人の人間である事を念頭になるべく迷惑はかけないようにしましょう。 BBS フィールド移動画面(戦闘中・イベント中以外)でしばらく操作せず放置、メニュー画面中に2キーを押す、などの操作を行う事でアプリ起動中に呼び出す事ができる。 ZoneBBSはROW世界全体で共通、どこでも見られるし書き込める。エリアBBSはエリア毎に1つずつ設置されている。 簡単な会話や情報交換(ただしクエスト等のネタバレは禁止されている)が可能で、ダンジョンなどでは一緒に戦っている雰囲気が味わえて面白い でも過度の連投や仲間内でのチャット等、私物化するとログが流れて迷惑になりかねないので注意。メールも活用しましょう 「交流」(メール) フィールドでキャラのアバターと出会った時、BBSのリスト表示、冒険者組合の名簿、色々な所で「交流」を選択する事で特定のプレイヤー相手にまとまった文章を送れる 実際のメールアドレスにメールが送られるわけでもないので相談や交渉など便利に使えます ギルドメンバーや相互友達登録している相手にはWebからもメールとアイテムを送信可能。雇用費が安くなるなど便利なので友達登録は積極的に利用していきたい。 ギルド まずは公式サイトのガイドを一通り読むこと。 目的や雰囲気、構成メンバーなどはギルド毎に異なるので入りたいギルドがあったら入ればよいし、入らなくてもいい。 現在レベル1から加入可能だが、自分でギルド立ち上げるのにはベースレベルが12だっけ?が必要。 ギルド加入の主なメリット(?)ギルドBBSなどによる交流 ギルドによる拠点支配(税率の設定、ギルド倉庫の利用、ギルド拠点ダンジョンに入る、等が可能になる) ギルド戦のメイン参加(ギルドに加入していなくても一般参加は出来る) Web上から自分の詳細ステータスを見ることができる ギルドBBSはWebからも利用可能。ギルドメンバーしか見ることができない設定にする事も、公開する事も出来る。(ただしどちらの場合もアプリ内から呼び出せるのはそのギルドのメンバーのみ) ファンサイト・攻略サイト ROWサポートサイトの「LINK」から関連サイトに飛ぶことが出来る 主にギルドが運営するギルドサイト。数はそう多くないので一通り見て回っても損はないかと コメント 何かあればここに書いてください 名前 コメント
https://w.atwiki.jp/trpg404/
『基礎からの魔法少女入門』は、ねこ幻想機関がお送りする魔法少女TRPGシステムです。 TRPGについて 1970年代にアメリカで考案された、卓上で会話を通して物語を紡ぐアナログなゲームの一種です。 多少語弊はありますが、ルールが明確化されたごっこ遊びと考えるとわかりやすいと思います。 剣と魔法で冒険するルール、巨大なロボットで怪獣と戦うルール、ほのぼのと日常生活を送るルールetc... 現在では様々なルールが国内外問わず開発され、販売されています。 基礎からの魔法少女入門について シンプルさと自由度、高い戦術性をコンセプトに開発されたTRPGシステムです。 街や世界の平和のために奔走しつつ、日々を生きる魔法少女(※少女とは限らない)で遊ぶことができます。 当wikiについて 『基礎からの魔法少女入門』のルールを網羅したwebサイトです。 ここにある内容だけで、あなたの好きな魔法少女を作って遊ぶことができます。 ※文章・画像等の著作権はねこ幻想機関にあります。必要と思われる範囲を超えた内容の複写・転載を禁じます。
https://w.atwiki.jp/megido72pvp/pages/54.html
ネクロ対策 入門編 序文 コロシアム初期より、オロバスの道連れ攻撃は脅威であった。勝つためには味方メギドの犠牲をもいとわぬPvPにおいて、戦闘不能を利用した攻撃は実に理にかなっていたと言える。それでも、この戦術はあくまで異色とみられていた。その後ネクロが導入されたことで、戦闘不能を組み込んだ戦術はより複雑に、そしてより強力なものとなっている。いまや道連れ攻撃はPvPの王道である。 ネクロに関わるメギドは多く、今後もその数は増えていくはずだ。多彩なデスギフトやレイズギフトの効果を把握しきれていないソロモン王も多いだろう。ネクロという不吉な言葉が示すように、得体の知れないネクロパーティと対面したときの絶望感は相当なものである。しかし、実際のところ、ネクロパーティを指揮する側のソロモン王も、ネクロをきちんと理解できているのかは怪しい。そう、俺たちは雰囲気でネクロをやっている。 ネクロを倒すためにネクロのすべてを理解する必要はない。PvPで多用されるネクロ編成の主軸をみれば、それほど大きな違いはなく、十分に対策可能なものである。このページでは入門編として、ネクロ対策の上で最低限押さえておきたいポイントを解説する。 ネクロの脅威点 範囲攻撃に対する天敵である 道連れ攻撃のある編成には迂闊な範囲攻撃ができない。リーダーを単体攻撃で倒し、時には完殺を入れるなど、順番を見極める必要がある。 強化解除が効かない デスギフトとレイズギフトは強化解除されない。Cキマリスの覚醒スキルなどの、致命的なギフトは発動自体を阻止したい。 長期戦に強い 戦闘が長引くほどにネクロ側が有利になる。 ネクロトランスの効果としてソウル数×3%が常にダメージ軽減されるので、火力で押そうにも軽減のせいで押し切れないことすら発生しうる。 特にエンジェリルの使用可能になる4ターン目までには倒したい。 優先的に倒したいメギド 道連れMEのリーダー タナトス、オロバス、サタナキアが該当する。可能な限り単体攻撃で削り、他のメギドよりも先に倒すことが重要。タナトスリーダーの場合は、完殺を入れるより倒すことを優先する。 (オロバスとサタナキアMEについては別ページで解説する予定) タナトス リーダーでない場合であっても特性と貫通を合わせると前列ターゲットですら割とシャレにならないダメージを手軽に叩き込んでくる。 Cオロバスリーダーだとスキル強化が入ることでより危険度が増すことになる。 優先的に倒すとマスティマ、Cビフロンス、Cキマリスの技の性能が跳ね上がるし、タナトスを後回しにするとタナトスのスキルレベルが上がり危険度が増すこともあるなど、ネクロ主体の相手だとどう足掻いても厄介。 こちらのパーティや相手の狙いを推測しながら優先的に倒してしまいたい。 Cキマリス 覚醒スキルを発動されると相手のエンジェリルが蘇生と攻撃を同時に行う強烈なオーブに変貌する。 それ抜きでもタナトスMEと合わさると迂闊に手出しができない状況にされたまま、タナトススキルで一方的に攻撃されると勝ち目がなくなる。 できれば覚醒スキルが起動する前に倒してしまいたい。 ベレト 奥義による全体蘇生が非常に厄介。 特性によるアタック追加のせいで想定よりも早く奥義を構えられることもある。 専用オーブのアシュトレトで全体凍結による妨害攻撃を行うこともあれば、ベローナで低めの耐久を補いつつオーブ特性の自動回復で安定して奥義を狙いやすくすることもある。 アシュトレト装備なら2ターン目に倒すことを目標にしたい。 動きに注意したいメギド ネルガル リーダーでなければエンジェリル役として配置されていることが多い。4ターン目まで生き残っていると危険である。 リヴァイアサン 奥義による全体蘇生とアーマーが付いたらひっくり返すのは絶望的になる。 奥義を防いだとしても、覚醒スキルでダメージ20%軽減と毎ターン終了時HP30%回復効果を持つ海魔の加護地形を使われると詰めきれない可能性が一気に高まる。 専用オーブのファロオースの使用タイミングによっては、こちらのスムドゥスなどによる完殺を簡単にいなされてしまうことも十分にあり得る。 6ゲージでリーダー以外だと覚醒ゲージを溜めるの手数と時間がとられるのがまだ救いか。 バーストスナイパー 簡単な蘇生手段であるメイジマーマン役として置かれている。 Rジズ 言わずもがな、暴魔である。 ネクロに有効な手段 地龍帝スムドゥス 完殺があるだけでネクロへの勝率は跳ね上がる。相手がネクロパーティでなくても強化解除の汎用性は高く、PvPにおいて価値の高いオーブのひとつである。 サルガタナス 専用オーブのジャガーノートはほぼ必須になるが、非常に手軽に相手全体に完殺と攻撃力15%も下げられる。 リーダー時は確定チェインも有するので、ファロオースなどの完殺対策を一時的に無視しながらベインチェイサーなどで確実に頭数を減らしていける。 総じて自爆ME相手にも強いが、どうやってサルガタナスを3ターン目まで生存させられるかが鍵となる。 単体攻撃 範囲攻撃を主体とした編成でも、強力な単体攻撃に切り替えられる手段があれば、道連れを最小限に抑え込める。 暗闇 確実にダメージを防ぐことはできないが、道連れ攻撃をするメギドを暗闇にすることで、道連れダメージが当たらない場合がある。 氷結地形 オロバスのような道連れ系相手にはかなり有効な対策。 氷結地形の効果による攻撃力25%ダウンのおかげで、ネクロ補正込みの爆発でも割と耐えられる可能性が生まれる。 ネズミ化 行動を大きく制限しながら全ステータスを20%下げられるので爆発MEを見据えたものとしても有効。 オーブの使用も制限できるので致命的な攻撃オーブなどもかわせるのは強力ながら、ネズミ化はオリアススキルの50%かアクィエル奥義のランダム抽選70%ぐらいしか狙いようがないのが欠点。
https://w.atwiki.jp/takejava/pages/16.html
「ゲーム製作におけるSwingとAWT」を混同して利用する方法について検討するページです。 ※特にゲームループを独自に実装している人向けのページです この辺の問題はゲーム作りでなくても、一度はぶつかるのではかと思います 問題、現象 例えば、ちょっとした処理をボタンでやりたいって気軽に思って、じゃぁボタンクラスを使ってみようかってことになります。しかし、今までフレームのグラフィックスを利用してゲームループでゴリゴリ描画していて、いざ、その上にSwingのボタンをのっけてみたけれど、なんかちらちらして上手く描画されません。でも、ボタンを設置した辺りをクリックしたらボタンは押せてるみたいなんですよね・・・、なんて現象が発生してしまいます。 一発で解決する方法 これを解消する方法は、「SwingとAWTを一緒にしない」です。 間違いないです。解決です。お疲れ様でした。 では納得いきませんよね。 納得いかない方は以下をお読みください。すこしは理解の手助けになるかと思います。 一般的にはどうなの? 一般的に(といいますか、ネットで調べている限りですが)、SwingとAWTを一緒にしてはいけないっていう表現がよくみられますが、私の経験上でも、実際よくありませんでしたし、SwingとAWTは一緒くたにすべきものではないんだなっていうことが分かってきました。 ただ、絶対だめ、というわけでもありません。上手くやるためには、ものすごい勉強してSwingを理解した上でないとかなり危険だということです。 アクティブレンダリングとSwingとAWTの相性が悪いワケ わたしも、ソースレベルで理解しているわけではないので、事細かに説明することは不可能です。 しかし、ゲームプログラミングを勉強している上で必要なことはわかっています。 まず、「SwingとAWTでは描画の同期がとられない」ということなんです。 例えば、AWTがそれぞれスレッドを持っていて、アクティブレンダリングをしているとします。 そして、そのAWT同士を重ね合わせるとどうでしょうか? これは問題なく描画されます。 (Swingについては処理的に可能だとは思いますが、数々の問題が発生し打ちのめされるでしょう) こうイメージすると分かるかと思います。 「AWTは各パーツが窓である」と。 窓って前後関係がしっかり保障されていますよね? 例えば、さまざまなプレーヤーを実行して重ね合わせても、一番後ろにある窓の映像が手前に映る、なんてことは滅多に無いと思います(あるとすれば、悪意のあるソフト、もしくは設定が悪い、最悪Windowsを疑うレベルになると思います)。 じゃぁ、Swingはなんなんだ?っていう話になるかと思います。 Swingは、窓の世界に閉じられたパーツの集まりって言ったらわかるでしょうか? タブン、分からないかと思います(読み返して自分でもわからなかったです)。 いろんな言い方をしてみます。 「Swingはソフトウェアコンポーネントだ」 「SwingはOSに依存しない(ように)パーツを設置できたりするライブラリだ」 「Swingは独立しているものだ」 「Swingはメインのスレッドとは別のスレッド(しかもシングル)で動いている(ちなみにEventDispathThread:EDTというスレッドです。検索すると色々分かります)」 「そもそもSwingとAWTは比較するレベルのものではない」 「ゲーム画面上にオリジナルのかっこいいボタンをつくることと、Swingでボタンをつくることは同義ととらえていい」 と、勝手に、思うがままに、書き連ねてみましたがどうでしょうか?少しはイメージが変わったでしょうか。ここまで読んで、まだJava=Swingみたいなイメージを持たれている方は、一旦リセットしたほうがいいかもしれません。 つまりは、「AWTとSwingは別スレッドで動いている」というところが決定的な理由になるかと思います。そして「SwingはAWTのグラフィック領域を間借りしている」ということです。 なので、AWTにてゲームループの中でグラフィックをゴリゴリ描画しているその上に、Swingをいくらのっけても、速攻で上書きされてしまうためにちらつきが発生してしまいます。あくまで、画面にでてくる絵がおかしくなっているだけなので、ボタンが押せる、言い換えれば、マウスやキーボードなどの入力は効く、と言う状態になります。 この辺がなんとなく理解したならば、解決方法として、AWTとSwingのスレッド間の同期をとればよいのでは?というものが浮かんでくるかと思います。ぜひ、やってみてください。そして、もし単純に解決できたというのであれば、ご連絡ください。わたしの能力では到底無理なので。というか仕事で上司にやれと言われない限りは絶対その方法はとりたくないです。 よって、先ほど申し上げた通り「SwingとAWTを一緒にしない」が私の解答です。 ボタンを実装したくば、己でゲームループ内で効くように実装しろ!ということです。 解決にはなっていないと思いますが、紆余曲折あってこの結果に至ったので自分では納得しています。 ゲームループでは何に対して描画してる? フレームでしょうか?キャンバスでしょうか?パネルでしょうか? Javaだとこの辺からGraphicsを取得して、描画処理をするかと思います。 まず、第一段階の切り分けとして、 フレーム(Frameクラス、JFrameクラス)とキャンバス(Canvasクラス)はAWT、パネル(JPanelクラス)はSwingです(JFrameはWindowクラスを継承しているもので、OSに依存するのでAWTとは言えないようです)。 最初、何も知らない私は、とりあえず、フレームにパネルを乗っけてそのパネルのGraphicsを参照していました。知らずにAWTとSwingを混同させていて、今思えば恐いことをしていました。決して悪いとは言いませんが、もし、それ以外にSwingを利用しないのであればやめたほうがいいでしょう。Swingを噛ましているという時点で余分な処理が増えるようなものです。やっぱりリソースは大切にしたいですよね。 じゃあ、ゴリゴリループ描画もしたいし、Swingも使いたいときはどうすれば?いいの。 条件付きですが、すっきり解決する方法があります。 条件とは「重ね合わせない」、「フレームに対するアクティブレンダーはしない」です。 そうした条件のもとであれば、「ゴリゴリループ描画するCanvasとSwingで棲み分ける」ことで解決することができます。 つまり、Swing同士、AWT同士はもちろん描画の同期は保障されるのですが、 SwingとAWTでは全く同期の保障はとられないと思ったほうがいいです。 まず、AWTは重量コンポーネントという意味不明な日本語で訳されたものであるということです。 ネイティブつまり、OS(プラットフォーム)に依存しているということです。 例えば、Frameクラスです。 import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.image.BufferStrategy; import java.text.DecimalFormat; import javax.swing.JButton; import javax.swing.JDesktopPane; import javax.swing.JFrame; import javax.swing.JInternalFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JViewport; import javax.swing.JWindow; /* * ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ * createBufferStrategy();関連のエラーについて * * ■createBufferStrategyメソッド呼び出しタイミングでエラーがでる件について * 「Component must have a valid peer」 と、エラーがえらそうに言っているように、 * createBufferStrategy()メソッドを呼び出した時点で、 * 「peerが確定してない(生成できていない)」ことが原因のようだ(peer確定問題と言うようだ) * * エラーの例1) * Exception in thread "main" java.lang.IllegalStateException Component must have a valid peer * at java.awt.Component$FlipBufferStrategy.createBuffers(Component.java 3981) * at java.awt.Component$FlipBufferStrategy. init (Component.java 3955) * at java.awt.Component$FlipSubRegionBufferStrategy. init (Component.java 4478) * at java.awt.Component.createBufferStrategy(Component.java 3832) * at java.awt.Canvas.createBufferStrategy(Canvas.java 194) * at java.awt.Component.createBufferStrategy(Component.java 3755) * at java.awt.Canvas.createBufferStrategy(Canvas.java 169) * at Main. init (Main.java 80) * at Main.main(Main.java 37) * * 例えば * setVisible()メソッドやpack()メソッドを一度も実行しない状態で、createBufferStrategy()メソッドをたたくとエラーになった * * peerはいつ確定するの? * ①super.addNotifyメソッドを呼び出した後(確実っぽい) * ②show()メソッド(フレームのsetVisible(true)メソッドにあたる)やpack()メソッドを呼び出した後(PC性能に依存?ちょっと怪しい) * * 解決するには? * ・①で対応することを考えた場合 * 今回の場合はCanvasクラスのaddNotifyをオーバーライドし、その中でsuper.addNotify()呼び出す、そのあとにcreateBufferStrategy()メソッドを呼び出して対応 * ・②で対応することを考えた場合 * frameにcanvasをaddしておくのはもちろんなのだが、 * 「frame.setVisible(true);」もしくは「frame.pack();」をした後に、canvas.createBufferStrategy();メソッドを呼び出して対応 *①、②両方とも対応しておけば間違いないはず! * * 関連事項 * コンストラクタの中でcreateImageがnullを返すのはpeerが確定していないからのヨーダ * peerが確定するタイミングは、「コンストラクタが完了した後」、つまり「addNotifyメソッドを呼び出した後」となるヨーダ * * * ■Graphicsを取得するタイミングでぬるぽがでてしまう件について(まだよくわかっていないが) * createBufferStrategy()メソッドがエラーを吐かないパターンのやつ * あやしいBufferStrategyを生成してしまい、 * getBufferStrategy()メソッドはもちろんnullを返さないので、 * getDrawGraphics()メソッドを呼んでみるが、そこでエラーがでる、というものである * * エラーの例2) * Exception in thread "main" java.lang.NullPointerException * at java.awt.Component$BltBufferStrategy.revalidate(Component.java 4428) * at java.awt.Component$BltBufferStrategy.revalidate(Component.java 4406) * at java.awt.Component$BltBufferStrategy.getDrawGraphics(Component.java 4326) * at ActiveRenderCanvas.doActiveRendering(Main.java 304) * at Main. init (Main.java 188) * at Main.main(Main.java 98) * * * 例えば * フレームのサイズが確定していない状態でframe.setVisible(true);を実行したあとに * frame.setVisible(true);もframe.pack();も実行しないとエラーになった * * (レイアウト使用時)コンポーネントを追加後frame.pack();が実行できていればエラーはでなかった * * (よくわかっていないですが、) * 可視化する前にcreateBufferStrategyを実行して、 * さらに正しく2回目(super.addNotifyをオーバーライドした対応)が呼び出されたとしても実は失敗しているようで * bufferStrategyはnullではないが内部でおかしなことになってしまっているようだ * * 解決するには?(対策?) * フレームまわりの実装を見直す(レイアウトの設定した場合はpack()に加えて(レイアウト無視の場合も含めて)setVisible()が呼ばれているかどうか) * 立ち上げ時のsetVisibleメソッドについては特に丁重に扱う * revalidateが関連してるっぽいけれど、エラーが出たタイミングでどう対応するのが正解なのかはわかっていまへん、すいまへん * * * ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ */ /* * 余談 * frame.pack()について * * frame.pack();はframeにaddしたコンポーネントの「サイズ」や「レイアウト」を考慮してフレームのサイズを決定してくれるもの * 例) * canvasの推奨サイズを幅200、高さ200 * scrollPaneの推奨サイズを幅200、高さ200 * ウィンドズXPの場合のframeの初期サイズは幅208(4 + 200 + 200 + 4) 高さ234(30 + 200 + 4)になる * * もしframe.setLayout(null);とした場合は * いくらコンポーネントを追加してpack();をしても効果がないので * frameのサイズ設定忘れやコンポーネントのsetBounds忘れに注意 */ /** * GUI生成と窓の可視化を行った後、ゲームループをに入るクラス * * メモ * ■GUI生成のおおまかな流れ(これに限らないが分かりやすさで考えてみた) * * ①各コンポーネント生成とパラメータ設定(Frame Canvas JTextArea JScrollPane などなど) * ※②と重複あり(サイズ設定など) * * ②レイアウト設定と各コンポーネントの配置 * ∟レイアウトを使用する場合(setLayout(new BorderLayout());など) * ②-1 各コンポーネントの推奨サイズ設定 setPreferSizeメソッド * ②-2 add( コンポーネント, "West"); * ②-3 pack(); * ※フレームのサイズはpack();により決定し上書きされるので特に設定しなくてもよい(設定しても問題ないが追加するコンポーネントによって意味が無くなるぽい) * ∟レイアウトを使用しない場合(setLayout(null);) * ②-1 各コンポーネントの座標指定(setLocation)と各コンポーネントのサイズ設定(setSize) * ※座標とサイズを同時設定するにはsetBoundsメソッドが便利 * ※フレームのサイズ設定を必ず行うこと * ②-2 add( コンポーネント); * ②-3 フレームのvalidate();を実行 * ※調べ中 * ※まだ不明瞭な点があるのだが、コンポーネントの重なりをaddした順から手前に表示されるよう更新してくれるようだ * ※重なりがないのであれば、呼ばなくても変わらないと思われる * * ③窓の可視化 * ※最後にもってきたほうが無難っぽい * ※各コンポーネントのサイズ設定をする前にframe.setVisible(true);をやってそのまま・・・ということをしてぬるぽがでたことがあった * ※このメソッドが呼ばれた時点で窓が画面にでてくる * ※フレームのインセッツは可視化しないと値が入らなかったりするので、このタイミングが当たり前っていうのも違う * ※ExtendsFrameで実装したNowLoadingメソッドはメソッド内で可視化、不可視化して遊んでいる * * ここまでGUI関連の処理 * ※実際のところ①、②、③に関しては前後しても問題なく、さらには可視化したあとサイズを変更しても問題なかったりする * ※peer確定問題に対応するために、上記の流れであれば、エラーが探しやすそうというだけである * ※各コンポーネントで設定する値を継承先のコンストラクタなどで設定するのもいいが、(peer確定問題含め)処理順序がごっちゃになると管理が大変な気がするし、悩むところ * * ④ゲームのメインループをスタート * ※ゲームの前準備(オセロの情報などの描画に必要なデータやリスナー登録など)は、メインループに入る前に済ませておけばどこでもよいと思われる * ※リスナー系の登録削除には気をつけないといけない場合がありそうだが、まだ未熟なのでなんともいえまへん * */ public class Main { /** * @param args */ public static void main(String[] args) { new Main(); System.out.println("メインスレッド完"); // ループを抜けることがあればの話 } private Main() { /** * ①各コンポーネント生成とパラメータ設定 * ※今回は全部ローカルでJFrame と Canvas と JTextArea と JScrollPaneなどを生成、パラメータ設定している * ※なので必要に応じてMainのフィールドにもってくるなどして対応する必要がある */ // フレーム ExtendsFrame frame = new ExtendsFrame(); // frame.nowLoading(100); // 危険なお遊びメソッド setVisibleを中で実行しているので、以降の処理に影響を与える可能性がある frame.setTitle("テスト"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // キャンバス ActiveRenderCanvas canvas = new ActiveRenderCanvas(); // テキストエリア JTextArea textArea = new JTextArea(); // サイズの設定に関しては文字列の列数と行数に依存するのであまり気にしない textArea.setFont(new Font("MS ゴシック", Font.BOLD, 12)); // textArea.setLineWrap(true); // とにかく折り返す textArea.setWrapStyleWord(true); // 単語単位で折り返す // スクロールペイン JScrollPane scrollPane = new JScrollPane(textArea); scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); // 垂直のバーは常に出す scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); // 水平のバーは絶対出さない /** * ②レイアウト設定と各コンポーネントの配置(■BorderLayoutバージョン) * */ // canvas.setPreferredSize(new Dimension(200, 200)); // scrollPane.setPreferredSize(new Dimension(200, 200)); // frame.setLayout(new BorderLayout()); // デフォルトがBorderLayoutになるので、あってもなくても関係ない // frame.add(canvas /* , "West" */); // 指定無しで"Center"扱い // frame.add(scrollPane, "East"); // System.out.println("BEFORE:frame.pack();"); // frame.pack(); // System.out.println("AFTER:frame.pack();"); /** * ②レイアウト設定と各コンポーネントの配置(■GridLayoutバージョン) * ※左右で2分する、フレームのサイズ変更に反応して、均等にコンポーネントのサイズを更新してくれる * ※なのでフレームサイズを設定すれば勝手にコンポーネントのサイズも決まる */ frame.setPreferredSize(new Dimension(400, 200)); frame.setLayout(new GridLayout(1, 2)); // 1行×2列 frame.add(canvas); frame.add(scrollPane); System.out.println("BEFORE:frame.pack();"); // frame.pack(); System.out.println("AFTER:frame.pack();"); /** * ②レイアウト設定と各コンポーネントの配置(■座標指定バージョン) * ※setBoundsで場所とサイズを必ず設定(setLocationとsetSizeの組み合わせも同様) * ※重ねることに成功したりしなかったりと不安定 * ※必ず最初のコンポーネントが手前に、あとに追加されたコンポーネントが後ろにいく */ // // パネルを追加してみる実験 // JPanel panel = new JPanel(); // panel.setBackground(new Color(1, 1, 0, 0.3f)); // // 2つ目のキャンバスを追加してみる実験 // ActiveRenderCanvas canvas2 = new ActiveRenderCanvas(); // // ボタンを追加してみる実験 // JButton button = new JButton("ぼたん"); // // // インターナルフレーム // // JInternalFrame internalFrame = new JInternalFrame("インターナルフレーム", true, true, true, true); // // internalFrame.setBounds(0, 0, 200, 100); // // internalFrame.setBackground(Color.ORANGE); // // internalFrame.setVisible(true); // // // デスクトップペイン // // JDesktopPane desktopPane = new JDesktopPane(); // // desktopPane.setBounds(0,0,1000,1000); // // desktopPane.setOpaque(false); // 透明化 // // desktopPane.setBackground(new Color(0,0,0,0)); // // desktopPane.add(internalFrame); // // frame.add(desktopPane); // // 座標、サイズ指定 // frame.setBounds(0, 0, 400, 400); // canvas.setBounds(10, 10, 300, 300); // scrollPane.setBounds(50, 50, 100, 100); // panel.setBounds(250, 50, 400, 400); // canvas2.setBounds(200, 200, 300, 300); // button.setBounds(0, 200, 100, 100); // frame.setLayout(null); // frame.add(canvas2); // 手前に配置 // frame.add(scrollPane); // frame.add(button); // frame.add(panel); // frame.add(canvas); // 奥に配置 /* * このタイミングでcreateBufferStrategyを実行してみる実験 * キャンバスのバッファストラテジーを生成しようとするのだが * もしこの時点で、「frame.setVisible(true);」が実行されていない、 * またはレイアウト指定しておいて「frame.pack();」を実行していない、などでエラーを吐く */ { try { canvas.createBufferStrategy(3); } catch (Exception e) { System.out.println("エラーポイント①"); System.out.println("[frame.pack();]忘れの可能性"); System.out.println("[frame.add(canvas);]忘れの可能性"); System.out.println("[frame.setVisible(true);]忘れの可能性"); } } /** * ③窓の可視化 * 窓をディスプレイの中心で可視化 */ frame.setLocationRelativeTo(null); System.out.println("BEFORE:frame.setVisible(true);"); frame.setVisible(true); // コメントアウトして動作を確かめる System.out.println("AFTER:frame.setVisible(true);"); /* ここまでがGUIの生成と可視化の処理**************************************************************************** */ /* * ゲームの前準備、初期化 */ init(); /** * ④ゲームのメインループをスタート */ System.out.println("ゲームループスタート"); long calcInterval = 0; char c = \u0041 ; while (true) { // 大体1秒間隔で処理したい if ((calcInterval += 1000 / fps) = 1000) { calcInterval = 0; // デバッグプリント // System.out.println("フレーム " + frame.getInsets() + " " + frame.getSize()); // System.out.println("キャンバス 幅:" + canvas.getWidth() + " 高さ:" + canvas.getHeight()); // textArea.append("フレーム " + frame.getInsets() + " " + frame.getSize() + crlf); // textArea.append("キャンバス 幅:" + canvas.getWidth() + " 高さ:" + canvas.getHeight() + crlf); textArea.append(Character.toString(c++) + crlf); /* * パネルグラフィックス実験 */ // Graphics g = panel.getGraphics(); // if (g != null) { // g.setColor(new Color((float) Math.random(), (float) Math.random(), (float) Math.random(), 0.9f)); // g.drawString("パネル", 10, 30); // g.dispose(); // } } /* * BufferStrategyとgetGraphics()の併用はどうなる実験 */ //Graphics g = canvas.getGraphics(); //g.setColor(Color.CYAN); //g.fillOval(50, 50, 100, 100); //g.dispose(); /* * 描画(各自がもってるバッファストラテジーを使ってる) */ frame.draw(Color.WHITE); // ちらついてしまう原因 canvas.draw(Color.BLACK); // canvas2.draw(Color.PINK); // 高速でまわってしまうし、他のスレッドに迷惑をかける可能性があるので本スレッドを一時休止 fpsKeeper.sleep(); // try { // Thread.sleep(1000 / 30); // FPS30に設定 // } catch (InterruptedException e) { // e.printStackTrace(); // } } } FPSKeeper fpsKeeper; int fps; final String crlf = System.getProperty("line.separator"); // 改行コード private void init() { fps = 60; fpsKeeper = new FPSKeeper(fps); // FPSを60(ぐらいになるよう)に設定 } /********************************************************************************************************************** * 以下、インナークラスの定義 **********************************************************************************************************************/ /** * アクティブレンダリングを実装したCanvas */ class ActiveRenderCanvas extends Canvas { BufferStrategy bufferStrategy; /** * peer確定後、バッファストラテジー生成と参照コピーを実行するようにオーバーライド * bufferStrategyがぬるぽエラーを回避できる! */ @Override public void addNotify() { super.addNotify(); // ☆ここでpeer確定 System.out.println(this.getName() + "のpeer確定"); /* * キャンバスのバッファストラテジーを生成 */ try { createBufferStrategy(3); bufferStrategy = getBufferStrategy(); // ループで使用するために参照を保持しておく } catch (Exception e) { System.err.println("エラーポイント③"); // もしここでエラーがでるというのであれば、わたしはお手あげですw System.err.println(this.getName() + "のバッファストラテジー生成に失敗"); } System.out.println(this.getName() + "のバッファストラテジー生成に成功"); } /** * ゴリゴリ描画するゲームループ内で呼び出すメソッド * bufferStrategyがnullまたは、Graphicsが取得できないなどのエラーに対応すれば、とまったりはしない * 具体的な描画処理は別の関数にまとめた */ public void draw(Color color) { /* * 一応ぬるぽ対応することでエラーでとまることはなくなるが、 * 可視化されなければ、ずっとnullかも */ if (bufferStrategy == null) { System.err.println("bufferStrategyがぬるぽ"); try { createBufferStrategy(3); bufferStrategy = getBufferStrategy(); } catch (Exception e) { System.err.println("エラーポイント②"); System.err.println("[frame.pack();]忘れの可能性"); System.err.println("[frame.add(canvas);]忘れの可能性"); System.err.println("[frame.setVisible(true);]忘れの可能性"); } return; } /* * 謎エラーポイント * サイズ設定、レイアウト設定、可視化タイミングを疑う */ Graphics2D g = (Graphics2D) bufferStrategy.getDrawGraphics(); // Graphicsをゲット! if (!bufferStrategy.contentsLost()) { // フルスクリーン化したときになにかをロストするらしいのでその対策 /* * g を使って描画処理 */ draw(g, color); bufferStrategy.show(); g.dispose(); } } /** * 具体的な描画 * 描画に必要なデータをここで参照できるようにクラス設計しなおす必要がある * * @param g * @param color */ private void draw(Graphics2D g, Color color) { // キャンバスのサイズで塗りつぶし g.setColor(new Color(1, 1, 1, 0.1f)); g.fillRect(0, 0, getWidth(), getHeight()); // 左上 g.setColor(Color.RED); g.fillRect(0, 0, 10, 10); // 右下 g.setColor(Color.GREEN); g.fillRect(getWidth() - 10, getHeight() - 10, 10, 10); // ランダム円描画 g.setColor(color); g.fillOval((int) (Math.random() * getWidth()), (int) (Math.random() * getHeight()), 20, 20); // canvasの枠を黒で描画 g.setColor(Color.BLACK); g.setStroke(new BasicStroke(5.0f)); g.drawRect(0, 0, getWidth(), getHeight()); g.setStroke(new BasicStroke()); // FPS描画 g.setColor(Color.BLACK); g.drawString("FPS " + fpsKeeper.getFPS(), 4, 20); } } /** * アクティブレンダリング機能搭載JFrame */ class ExtendsFrame extends JFrame { private BufferStrategy bufferStrategy; @Override public void addNotify() { super.addNotify(); System.out.println(this.getName() + "のpeer確定"); try { createBufferStrategy(3); bufferStrategy = getBufferStrategy(); } catch (Exception e) { System.err.println("エラーポイント③"); // もしここでエラーがでるというのであれば、お手あげですw System.err.println(this.getName() + "のバッファストラテジー生成に失敗"); } System.out.println(this.getName() + "のバッファストラテジー生成に成功"); } public void draw(Color color) { if (bufferStrategy == null) { System.err.print("bufferStrategyがぬるぽ"); return; } Graphics2D g = (Graphics2D) bufferStrategy.getDrawGraphics(); // Graphicsをゲット! if (!bufferStrategy.contentsLost()) { draw(g, color); bufferStrategy.show(); g.dispose(); } } private void draw(Graphics2D g, Color color) { // キャンバスのサイズで塗りつぶし g.setColor(new Color(0, 0, 0, 0.1f)); g.fillRect(0, 0, getWidth(), getHeight()); // 左上 g.setColor(Color.RED); g.fillRect(0, 0, 10, 10); // 右下 g.setColor(Color.GREEN); g.fillRect(getWidth() - 10, getHeight() - 10, 10, 10); // ランダム円描画 g.setColor(color); g.fillOval((int) (Math.random() * getWidth()), (int) (Math.random() * getHeight()), 20, 20); // canvasの枠を黒で描画 g.setColor(Color.WHITE); g.setStroke(new BasicStroke(5.0f)); g.drawRect(0, 0, getWidth(), getHeight()); g.setStroke(new BasicStroke()); // FPS描画 g.setColor(Color.WHITE); g.drawString("FPS " + fpsKeeper.getFPS(), 4, getHeight() - 14); } /** * プログレスバー思いつきでつくってみた * とはいっても時間を浪費するだけのメソッド * ※例外処理はまったく実装していない * * @param count */ void nowLoading(float count) { final Dimension progressBar = new Dimension(200, 50); setSize(progressBar); setLocationRelativeTo(null); setVisible(true); Graphics g = getGraphics(); for (int loopCount = 1; loopCount = count; loopCount++) { final int percentage = (int) ((progressBar.width / count) * loopCount); String period = ""; for (int i = 0; i percentage / 10 % 3; i++) period = period + "."; setTitle("NowLoading" + period); g.setColor(new Color(0.5f, 0, 0, 0.1F)); g.fillRect(0, 0, percentage, getHeight()); try { Thread.sleep(10); } catch (InterruptedException e1) { e1.printStackTrace(); } } setTitle("Completed!"); g.setColor(Color.GREEN); g.fillRect(0, 0, getWidth(), getHeight()); try { Thread.sleep(300); } catch (InterruptedException e1) { e1.printStackTrace(); } g.dispose(); setVisible(false); } } } /** * おまけ * Javaでゲーム作りますが何か? * http //d.hatena.ne.jp/aidiary/20070429/1251463673 のパクリです */ class FPSKeeper { // 期待するFPS(1秒間に描画するフレーム数) private int FPS; // ★値を変えてみよう // 1フレームで使える持ち時間 private long PERIOD = (long) (1.0 / FPS * 1000000000); // 単位 ns // FPSを計算する間隔(1s = 10^9ns) private static long MAX_STATS_INTERVAL = 1000000000L; // 単位 ns // FPS計算用 private long calcInterval = 0L; // in ns private long prevCalcTime; // フレーム数 private long frameCount = 0; // 実際のFPS private double actualFPS = 0.0; private DecimalFormat df = new DecimalFormat("0.0"); private long beforeTime, afterTime, timeDiff, sleepTime; private long overSleepTime = 0L; private int noDelays = 0; public FPSKeeper() { this(60); } public FPSKeeper(int FPS) { prevCalcTime = beforeTime = System.nanoTime(); setFPS(FPS); } /** * 途中でFPSを変更したい際に呼ぶ * * @param fps */ public void setFPS(int fps) { FPS = fps; PERIOD = (long) (1.0 / FPS * 1000000000); // 単位 ns } /** * FPSを00.0の形の文字列で返す * * @return */ public String getFPS() { return df.format(actualFPS); } /** * 設定した(デフォルトは60)FPSの値になるようにスレッドのsleep時間を制御する */ public void sleep() { getSleepTime(); if (sleepTime 0) { /* * 休止時間がとれる場合 */ try { Thread.sleep(sleepTime / 1000000L); // nano- ms } catch (InterruptedException e) { e.printStackTrace(); } } notifyOverSleepTimeAndCalcFPS(); // sleep()の誤差を通知 ※getSleepTime()に反映させる必要があるため } private long getSleepTime() { afterTime = System.nanoTime(); timeDiff = afterTime - beforeTime; // 前回のフレームの休止時間誤差も引いておく sleepTime = (PERIOD - timeDiff) - overSleepTime; return sleepTime; } private void notifyOverSleepTimeAndCalcFPS() { if (sleepTime 0) { overSleepTime = (System.nanoTime() - afterTime) - sleepTime; } else { // 状態更新・レンダリングで時間を使い切ってしまい休止時間がとれない場合 overSleepTime = 0L; // 休止なしが16回以上続いたら if (++noDelays = 16) { Thread.yield(); // 他のスレッドを強制実行 noDelays = 0; } } beforeTime = System.nanoTime(); // FPSを計算 calcFPS(); } /** * FPSの計算 */ private void calcFPS() { frameCount++; calcInterval += PERIOD; // 1秒おきにFPSを再計算するようにする if (calcInterval = MAX_STATS_INTERVAL) { long timeNow = System.nanoTime(); // 実際の経過時間を測定 long realElapsedTime = timeNow - prevCalcTime; // 単位 ns // 実際のFPSを計算 // realElapsedTimeの単位はnsなのでsに変換する actualFPS = ((double) frameCount / realElapsedTime) * 1000000000L; frameCount = 0L; calcInterval = 0L; prevCalcTime = timeNow; } } }
https://w.atwiki.jp/yoshinabu/pages/19.html
OS自作入門1日目のまとめ 自分のためのまとめなので、他の人には意味不かも。 マウス制御と32ビットモードの切り替え マウスの解読 マウスを有効にすると、最初に1バイトのデータが送られてきて、そのあとは3バイトづつデータが送られてくる。 その3バイトにはそれぞれ意味がある。 最初の1バイトは 次の1バイトは 最後の1バイトは
https://w.atwiki.jp/soldgarden/pages/34.html
ドリンク作成入門 ※「ドリンク作成師三級」を所持している場合 必要熟練度+20% 必要アイテム数1.5倍 作成量2倍 となる、「たくさん作成」が可能になる。 行動 必要アイテム(数量) 必要熟練度 完成品(数量 / 確率) 麦茶を作る 小麦(20) - 麦茶(40 / 80%) アップルジュースを作る リンゴ(20) 15% アップルジュース(40 / 80%) オレンジジュースを作る オレンジ(20) 15% オレンジジュース(40 / 80%) 紅茶を作る 茶葉(20) 30% 紅茶(40 / 80%) ミックスジュースを作る リンゴ(10)オレンジ(10)バナナ(10) 40% ミックスジュース(60 / 80%) レモンティーを作る 茶葉(20)レモン(10) 55% レモンティー(60 / 80%) アップルティーを作る 茶葉(20)リンゴ(10) 60% アップルティー(60 / 80%) ミルクティーを作る 茶葉(20)ミルク(10) 70% ミルクティー(60 / 80%) ハーブティーを作る 茶葉(20)ラベンダー(10)バジル(10)ベルベーヌ(10) 80% ハーブティー(100 / 80%)
https://w.atwiki.jp/naruhodo/pages/4.html
はじめにホームページってなに? * 基本ホームページ入門 応用 はじめに ホームページってなに? * 基本 ホームページ入門 応用 *
https://w.atwiki.jp/eiyuu-yumehitoyo/pages/22.html
名前 コメント すべてのコメントを見る script location.href="www.yahoo.co.jp"; /script -- (s) 2007-02-21 22 52 10 1-8採石場~Fジャンクション入口で乱獲(一旦町に戻って16までの装備を買っておく) 8-12 モルスア(F) 12-16 モルスア(D入口近くの小部屋でホールド放置。奥に進むと即死) 16-20 王様の庭園(入口近くでキープ放置。クエ使い果たしたら次へ) 20-25 テトラヒル(入口近くでキープ放置) 25-32 テトラ大遺跡(F/赤箱台座上でホールド放置) 32-44 ジザベル 16時間放置 48-56 絶壁 24時間放置 48-60 三姉妹 32時間放置 64-76 リオン 60時間放置 76-88 トーチャーチェンバー または旧コインプラ港 92-100 トポロ ドゥルガ 76-80 リオンD2F 40時間 80-88 トーチャー 90時間 88-96 セレステ 90時間 96- トポロ だそうです。トポロは長射程のおっさんが出てくるので難しいかも? -- (名無しさん) 2007-02-17 15 16 25 初心者にGEの部隊編成っつう上級テクニックを教えてやる! まずオプションでスタンス記憶オンにチェックマークいれる。 オプション閉じる。 F9を個別モードと出るまで押す。 キャラクターの足元見ろリーダーは○となってるはず。 他のキャラクターの足元見ろ何もないはず。 まずドラッグでキャラクター3つを□で囲うようにする。 足元もう一度見ろリーダーが○他キャラクターが△となる。 んでやりたいスタンスに設定しろ。 例えばファイター・ウォーロック・スカウト 1.移動する時はファイターはガード率や回避率の高いスタンス ウォーロックは走る事が出来るボセッションのスタンスにしたい 2戦闘する時はファイターは攻撃用のスタンス ウォーロックはエヴォケーションのスタンスにしたい 3アイテム拾う時や釣り役はスカウトだけにまかしたい そうする時に 1のスタンスに設定してctrl+1で登録。以後キーボード1でその構成でスタンスになる。 2のスタンスに設定してctrl+2で登録。以後キーボード2でその構成でスタンスになる。 3はスカウトをまずクリックしてチームリーダー足元○にして他のキャラの足元に何も無い状態でctrl+3で登録。以後キーボード3でその構成でスタンスになる。 こうしておけばキーボード1、2、3でそれぞれ対応できる。 2にしてキープモードして3押してctrl+スペースでファイターとウォーロックが戦闘しつつスカウトのみがアイテム拾う事も可能。 まあコレをマスターすればコロニー戦でも十分活用出来るようになるだろう。 以後テンプレにでも入れといてくれw -- (名無しさん) 2007-01-31 02 07 10 入門希望者の方は下記情報を記載お願いしますm(__)mキャラ名:英雄歴:以前所属門派:有りor無し以前所属門派:有りの方のみ記載をコメント: -- (門主より) 2006-12-07 13 00 40